//#include <stdio.h>
//#include <unistd.h>
////int main()
//{
//  pid_t ret = fork();
//  if(ret == 0) printf("son : %d\n", ret);
//  else if(ret > 0) printf("father : %d\n", ret);
//  else perror("fork");
//  return 0;
//}
//


//int main()
//{
//  printf("AAAAAAAAAAAAAAAAA\n");
//  fork();
//  printf("BBBBBBBBBBBBBBBBB\n");
//  return 0;
//}
//
//#include <stdlib.h>
//int main()
//{
//  //pid_t ret = fork();
//  printf("AAAAAAAAAAa");
//  exit(0);
//  //if(ret == 0)
//  //{
//  //  printf("son pid : %d", getpid());
//  //  _exit(-1);
//  //}
//  //else if(ret > 0)
//  //{
//  //  printf("father pid : %d", getpid());
//  //}
//  //return 0;
//}
//

//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//int main()
//{
//  printf("hello world");
//  exit(-1);
// // return 0;
//}
//


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
int main()
{
  pid_t ret = fork();
  if(ret < 0)
    perror("fork");
  else if (ret == 0)
  {
    for(int i = 0; i < 5; i++)
    {
      printf("子进程正在运行，pid : %d\n", getpid());
      sleep(1);
    }
  }
  else{
    int status;
    pid_t val = waitpid(-1, &status, 0);
    if(WIFEXITED(status) && val == ret)
    {
      printf("正常结束,code");
    }
  }
  return 0;
}
//int main()
//{
//  pid_t ret = fork();
//  if(ret == 0)
//  {
//    for(int i = 0; i < 10; i++)
//    {
//      printf("sonpid : %d\n", getpid());
//      sleep(1);
//    }
//  }
//  else{
//    int status;
//    pid_t val = wait(&status);
//    if(val > 0 && (status & 0x7F) == 0)
//    {
//      printf("exit code : %d\n", (status >> 8) & 0xFF);
//    }
//    else{
//      printf("exit code : %d\n", status & 0x7F);
//    }
//  }
//  return 0;
//}
//int main()
//{
//  //pid_t val = wait(NULL);
//  //printf("%d\n", val);
//  pid_t ret = fork();
//  if(ret == 0)
//  {
//    printf("我是子进程pid:%d，父进程等我执行完再继续\n", getpid());
//    exit(-1);
//  }
//  else
//  {
//    pid_t val = wait(NULL);
//    printf("我是父进程，子进程返回的值为：%d\n", val);
//  }
//  return 0;
//}
//void TestExit()
//{
//  printf("exit.....");
//  exit(0);
//}
//
//void Test_Exit()
//{
//  printf("_exit....");
//  _exit(0);
//}
//int main()
//{
//  pid_t ret = fork();
//  if(ret == 0)
//  {
//    printf("测试_exit函数");
//    _exit(-1);
//  }
//  sleep(5);
//  printf("测试exit函数");
//  exit(-1);
//  return 0;
//}
